home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Software Vault: The Gold Collection
/
Software Vault - The Gold Collection (American Databankers) (1993).ISO
/
cdr49
/
118_01.zip
/
CHANGES.DOC
< prev
next >
Wrap
Text File
|
1993-06-03
|
7KB
|
207 lines
.cm changes made to primitives
.cm source: changes.doc
.cm version: October 15, 1981
.bp 1
.he 'changes.doc''%'
.fo ''-#-''
This file discusses changes that I made to
adapt the primitives from the Software Tools Users Group
to the environment of BDS C.
As I mentioned in the file CONTENTS.DOC,
these changes are not very satisfactory.
The resulting primitives are compatible with neither
the Software Tools Primitives nor the Unix primitives.
However, many of the primitives supplied by the
Software Tools Users Group have no analog in the
Unix primitives.
Thus, it will still pay you to look at the primitives
and see what you can use.
.ul
Changes made to BDSCIO.H
All global definitions used by BDS C and the Software Tools
have been combined into the file TOOLS.H.
The following changes have been made to BDSCIO.H:
1. I have not included the constants for terminal
characteristics, serial port characteristics or modem
characteristics.
I really don't see why these are needed in
.ul
every
program.
However, the definition for ESC does appear in TOOLS.H.
2. The definition of MAXLINE has been moved so that it
appears with all other constants which affect data structures.
3. Ditto for NSECTS, BUFSIZ and struct _buf.
4. Since the Software Tools assume that dynamic storage is
available, I have removed the ALLOC_ON and ALLOC_OFF
definitions.
All tools compiled with TOOLS.H will have access to
struct _header and the variables _base and _allocp.
I think this is a reasonable scheme because there are lots
of variables whose names start with either _ or SYS_.
We might as well just prevent the user from using variables
and functions which start with those characters.
Another reason why this decision seems reasonable is that
the dsinit() primitive makes it unnecessary for programs to
access _base and _allocp directly.
.ul
Changes made to RATDEF:
1. I have eliminated many of the definitions for ASCII
control characters.
This was done in an effort to control the number of
names that the system is supposed to define.
2. I have eliminated all of the definitions for individual
letters.
For instance, I see no reason to define BIGA as "A".
In RATFOR, there is a reason, but not in C.
3. I have eliminated most, but not all, of the definitions
for printable ASCII characters.
I have kept only those characters that may not appear on
most keyboards or which might be confusing inside quotes.
4. I have eliminated most RATFOR language extensions because
they already are a part of C.
Indeed, their purpose was to make RATFOR look more like C.
5. I have eliminated most of the "manifest constants".
These are either unneeded or are duplicates of BDS C constants.
6. I have (reluctantly) kept most of the constants which
affect the size of data structures.
This is one area where having pointers eliminates a lot
of Mickey Mouse declarations that do absolutely nothing.
There is a real difference between:
int vector[] /* in C */
and
integer vector (ARB) # in RATFOR.
The diffence is that there are a lot fewer irrelevant names
(I'm talking about ARB) to worry about.
7. I have eliminated the DRIVER and DRETURN macros.
I don't know how to implement them in BDS C.
8. I have inserted declarations for variables used by
my implementation of the primitives.
These declarations are needed in TOOLS.H only because
BDS C does not have STATIC variables.
.ul
changes to BDS C routines
The names
of several BDS C routines conflict with the names
of the primitives used by the Software Tools.
The following BDS C routines were changed by prefixing
them with an underscore character:
close, creat,
exit,
fclose, fcreat, fflush, fopen, flush,
getc, gets, getchar,
open,
putc, puts, putchar,
read,
rename,
rcfsiz, rreed, rseek, rsrec, rtell, rwrite
seek,
ungetch, unlink,
write
The routines getc(), putc(), and ungetc() are now defined on
file FILE.BDS rather than on STDLIB1.C.
These routines had to be completely rewritten to allow for
I/O redirection.
Some other changes were made to the code in TOOLIB1.BDS
to allow for I/O redirection.
See that file for more details.
.ul
Changes made to the Software Tools Primitives
1. The calling sequence of getch() was changed.
old calling sequence: c = getch (unit, &c)
new calling sequence: c = getch (unit)
The change was made because the old calling sequence is
awkward in a C environment.
The old sequence was used because the following is not
legal in a RATFOR environment:
while ((c = getch(unit)) != EOF) {
2. The calling sequence of getarg() was changed.
old calling sequence: arg = getarg (n)
new calling sequence: p = getarg (n)
In other words, the new version of getarg() returns a pointer
to the argument where the old version copied the argument.
The change was made because there is no need for getarg
to actually copy an argument.
Returning a pointer to an arg is more natural in C.
3. Getwrd() changes one of its parameters.
Thus, the calling sequence must be:
j = getwrd (in, &i, out);
4. The old definition of type() is absurd.
There is, in fact, not much use for this "primitive" in C.
I suggest that type() return "a" for alphabetic characters,
"0" for numeric characters, and the character itself for all
other characters.
See STRING.BDS for the new definition of type().
5. Stcopy() changes one of its parameters.
Thus, the calling sequence must be:
stcopy (from, i, to, &j);
6. The C version of index must return one less than the
RATFOR version of index because C arrays start at 0, not 1.
7. The length() primitive in RATFOR is a duplicate of the
BDS C strlen() routine.
8. The RATFOR ctoi() routine changes one of its arguments.
Thus, the calling sequence must be:
ctoi (string, &i);
9. I have not examined (or converted) many of the routines
in CONVERT.BDS or PATTERN.BDS.
I can't say for sure what may have to be done.
However, many of the routines in PATTERN.BDS change
their arguments.
Thus, the calling sequences for these routines will have
to contain the & character.
10. As I have said before, I don't exactly know what to
do with the routines in SYMTAB.BDS.
The routines there do work, but they assume that the
information field associated with a symbol is a string
terminated by an EOS.
This is not a very good way to design an important primitive.
See the comments and code in SYMTAB.BDS for more details.